home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / tex / dfutil1.zip / SHIFTER.ZIP / SHIFTER.BAS next >
BASIC Source File  |  1990-11-11  |  5KB  |  176 lines

  1. DECLARE SUB parsecommand ()
  2. 'SHIFTER switches all Upper to lowercase and vice versa,
  3. ' excepting text included in quote marks
  4. '
  5. ' $INCLUDE: 'qb.bi'
  6.  
  7. DECLARE FUNCTION exists (filename$)
  8.  
  9. CONST YES = 1, NO = 0
  10. DIM SHARED inregs AS RegTypeX, outregs AS RegTypeX
  11. DIM SHARED arg$(10)
  12.      
  13.       parsecommand
  14.       infile$ = arg$(1)
  15.       IF infile$ = "" THEN GOTO help
  16.       IF exists(infile$) = NO THEN GOTO nofind
  17.       OPEN infile$ FOR INPUT AS #1
  18.       outfile$ = "temp"
  19.       OPEN outfile$ FOR OUTPUT AS #2
  20.       IF RIGHT$(arg$(2), 1) = "U" THEN
  21.             old$ = "Lowercase"
  22.             new$ = "Uppercase"
  23.       ELSEIF RIGHT$(arg$(2), 1) = "L" THEN
  24.             old$ = "Uppercase"
  25.             new$ = "Lowercase"
  26.       ELSE
  27.             GOTO badinstruct
  28.       END IF
  29.       GOSUB filename
  30.       oldfile$ = UCASE$(file$) + ".OLD"
  31. header:
  32.       COLOR 15: PRINT "SHIFTER "; : COLOR 7: PRINT "Fast upper and lowercase converter"
  33.       PRINT "Shifting "; old$; " to "; new$; " in "; infile$; ", creating "; oldfile$
  34.       PRINT "Hit [Ctrl]+[Break] to terminate."
  35.       GOSUB time
  36.       PRINT " Start time:"; newtime$
  37.       PRINT " Processing: ";
  38.       z = 0
  39. cycle:
  40.       IF EOF(1) THEN GOTO finish
  41.       LINE INPUT #1, L$
  42.       z = z + 1: out$ = ""
  43.       LOCATE , 13: PRINT z;
  44. top:
  45.       IF INSTR(L$, CHR$(34)) = 0 THEN
  46.              IF new$ = "Lowercase" THEN GOSUB Lower ELSE GOSUB upper
  47.              ELSE GOTO splitquote
  48.       END IF
  49.       out$ = L$
  50. dump:
  51.       PRINT #2, out$
  52.       GOTO cycle
  53. splitquote:
  54.       lq = INSTR(L$, CHR$(34))
  55.       rq = INSTR(lq + 1, L$, CHR$(34))
  56.              IF rq = 0 THEN rq = LEN(L$)
  57.       lt$ = LEFT$(L$, lq - 1)
  58.       qt$ = MID$(L$, lq, (rq - lq + 1))
  59.       rt$ = MID$(L$, rq + 1)
  60.       L$ = lt$
  61.       IF new$ = "Lowercase" THEN GOSUB Lower ELSE GOSUB upper
  62.       out$ = out$ + L$ + qt$
  63.       start = rq
  64.       L$ = rt$
  65. lookagain:
  66.       IF INSTR(L$, CHR$(34)) = 0 THEN
  67.             IF new$ = "Lowercase" THEN GOSUB Lower ELSE GOSUB upper
  68.             out$ = out$ + L$
  69.       ELSE GOTO splitquote
  70.             IF new$ = "Lowercase" THEN GOSUB Lower ELSE GOSUB upper
  71.             out$ = out$ + L$
  72.       END IF
  73.       GOTO dump
  74. '*************************** general subroutines ******************************
  75. Lower:
  76.       FOR i = 1 TO LEN(L$)
  77.           IF ASC(MID$(L$, i, 1)) > 64 AND ASC(MID$(L$, i, 1)) < 91 THEN
  78.           MID$(L$, i, 1) = CHR$(ASC(MID$(L$, i, 1)) + 32)
  79.           END IF
  80.       NEXT
  81.       RETURN
  82. upper:
  83.       FOR i = 1 TO LEN(L$)
  84.             IF ASC(MID$(L$, i, 1)) > 96 AND ASC(MID$(L$, i, 1)) < 123 THEN
  85.                   MID$(L$, i, 1) = CHR$(ASC(MID$(L$, i, 1)) - 32)
  86.             END IF
  87.       NEXT
  88.       RETURN
  89. time:
  90.       intime$ = TIME$                                 'current time changed
  91.       hour$ = MID$(intime$, 1, 2)                     'to newtime$
  92.       min$ = MID$(intime$, 4, 2)
  93.       sec$ = MID$(intime$, 7, 2)
  94.       hour = VAL(hour$)
  95.       IF hour < 12 THEN ampm$ = "am" ELSE ampm$ = "pm"
  96.       IF hour > 12 THEN hour = hour - 12
  97.       hour$ = STR$(hour)
  98.       newtime$ = hour$ + ":" + min$ + ":" + sec$ + " " + ampm$
  99.       RETURN
  100. filename:                                         'splits infile$ into
  101.           period = INSTR(infile$, ".")              'file$ and ext$
  102.           IF period = 0 THEN
  103.                 file$ = infile$
  104.                 ext$ = ""
  105.           ELSE
  106.                 file$ = LEFT$(infile$, period - 1)
  107.                 ext$ = MID$(infile$, period + 1)
  108.           END IF
  109.           RETURN
  110. '****************************** help and error routines ***********************
  111. help:
  112.       PRINT " "
  113.       PRINT "SHIFTER converts Uppercase and Lowercase in a file. "
  114.       PRINT "(c) 1990 David A. Wesson"
  115.       PRINT " "
  116.       PRINT "Syntax: SHIFTER  [d:]oldfile  /U or /L"
  117.       PRINT " where  oldfile = original file  [drive optional]"
  118.       PRINT "           /U   = convert TO Upper"
  119.       PRINT "           /L   = convert TO Lower"
  120.       PRINT ""
  121.       PRINT "NOTE: Words inside quotes will be left unchanged."
  122.       PRINT "      This program makes a backup of the original file"
  123.       PRINT "      named filename.OLD"
  124.       END
  125. killhandle:
  126.       GOTO header
  127. nofind:
  128.       PRINT "ERROR: No file by that name found."
  129.       GOTO help
  130. badinstruct:
  131.       PRINT "ERROR: Bad or missing instruction."
  132.       GOTO help
  133. finish:
  134.       CLOSE
  135.       IF exists(oldfile$) = YES THEN KILL oldfile$
  136.       NAME infile$ AS oldfile$
  137.       NAME outfile$ AS infile$
  138.       GOSUB time
  139.       PRINT ""
  140.       PRINT "Finish time:"; newtime$
  141.       END
  142.  
  143.         
  144.  
  145. FUNCTION exists (search$)
  146.      savefile$ = search$
  147.      inregs.ax = &H4E00
  148.      inregs.cx = 1     '3 for hidden
  149.      search$ = search$ + CHR$(0)
  150.      inregs.dx = SADD(search$)
  151.      inregs.ds = -1
  152.      CALL INTERRUPTX(&H21, inregs, outregs)
  153.      IF (outregs.flags AND 1) = 1 THEN
  154.             exists = NO
  155.      ELSE
  156.             exists = YES
  157.      END IF
  158.      search$ = savefile$
  159. END FUNCTION
  160.  
  161. SUB parsecommand
  162.       inline$ = COMMAND$
  163.       word = 1
  164.       FOR x = 1 TO LEN(inline$)
  165.             y$ = MID$(inline$, x, 1)
  166.             IF ASC(y$) = 32 THEN
  167.                 IF arg$(word) <> "" THEN word = word + 1
  168.             ELSE
  169.                 arg$(word) = arg$(word) + y$
  170.             END IF
  171.       NEXT x
  172. END SUB
  173.  
  174.  
  175.  
  176.